package mq.rabbitmq.b_publish_subscribe;

import com.rabbitmq.client.*;
import mq.rabbitmq.ConnectionUtil;
import mq.rabbitmq.MqConstants;
import mq.rabbitmq.MyDefaultConsumer;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消费者1
 * 生产者发送的消息，每个消费者都能接收到，从而达到广播的效果
 *
 * @author shanzhenbo
 */
public class Consumer1 {

	public static void main(String[] args) throws IOException, TimeoutException {
		Connection connection = ConnectionUtil.getConnection();
		Channel channel = connection.createChannel();

		//声明交换机
		channel.exchangeDeclare(MqConstants.FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);

		/*
		 * 声明队列
		 * 参数1：队列名称
		 * 参数2：是否定义持久化队列
		 * 参数3：是否独占本次连接
		 * 参数4：是否在不使用的时候自动删除队列
		 * 参数5：队列其它参数
		 */
		channel.queueDeclare(MqConstants.FANOUT_QUEUE_1, true, false, false, null);
		//队列绑定交换机
		channel.queueBind(MqConstants.FANOUT_QUEUE_1, MqConstants.FANOUT_EXCHANGE, "");
		MyDefaultConsumer consumer = new MyDefaultConsumer(channel, "消费者1");

		/*
		 * 监听消息
		 * 参数1：队列名称
		 * 参数2：是否自动确认，设置为true为表示消息接收到自动向mq回复接收到了，mq接收到回复
		 会删除消息，设置为false则需要手动确认
		 * 参数3：消息接收到后回调3）消费者2
		 */
		channel.basicConsume(MqConstants.FANOUT_QUEUE_1, true, consumer);
	}

}
